package autorization;

import java.io.FileNotFoundException;
import java.io.IOException;

/*-------------------------------------*/
/**
 *  Интерфейс Таблицы Ролей
 * @author ID=1008, Ustinov Anton
 */
public interface IRolesTable {

    /**
     * Добавление новой роли в таблицу.
     * В случае, если роль уже существует - будет выдано исключение RolesTableException.
     * @param R - объект Роль, с указанным именем, приоритетом и списком допустимых
     * действий для данной роли.
     * @throws IOException  - файл сериализации таблицы ролей не доступен или был удалён во время работы программы
     * @throws RolesTableException  - роль с такими атрибутами уже зарегистрирована в системе
     */
    public void addRole(Role R) throws RolesTableException, IOException ;

    /** Удаление существующей роли из таблицы ролей.
     * @param ID - уникальный идентификатор удаляемой роли
     * в случае, если удаляемой роли не существует, вызывается исключение
     * @throws autorization.RolesTableException
     * @throws IOException  - файл сериализации таблицы ролей не доступен или был удалён во время работы программы
     */
    public void removeRole(long ID) throws RolesTableException, IOException;

    /** Обновление Роли.
     * @param R - ссылка на объект роли
     * @throws autorization.RolesTableException
     * @throws IOException  - файл сериализации таблицы ролей не доступен или был удалён во время работы программы
     */
    public void updateRole(Role R) throws RolesTableException, IOException;

     /**
     * Найти роль по идентификатору
     * @param ID - идентификатор роли
     * @return найденная роль или null-значение в случае если роль с таким идентификатором не зарегистрирована в таблице
     */
    public Role findRole(long ID);

     /**
     * Найти роль по имени
     * @param Name -имя роли
     * @return найденная роль или null-значение в случае если роль с таким именем не зарегистрирована в таблице
     */
    public Role findRole(String Name);

    /**
     * Импортирование из файла таблица ролей заданного в качестве входного параметра
     * @param FileName - пусть к файлу с таблицей ролей
     * @throws FormatException - формат файла не соответсвует формату таблицы ролей или файл повреждён
     * @throws FileNotFoundException - файл с таким именем не найден
     * @throws IOException  - файл сериализации таблицы ролей не доступен или был удалён во время работы программы
     */
    public void fImport(String path) throws FormatException,FileNotFoundException, IOException;

    /**
     * Получить директорию файла таблицы ролей
     * @return путь к файлу таблицы ролей
     */
    public String getPath();

    /**
     * очистка таблицы ролей
     */
    public void clear();

    /**
     * Проверить, не обнаружила ли система ошибок связанных с недоступностью или повреждённостью файла таблицы ролей
     * @return true - файл не содержит ошибок и регулярно обновляется, false - файл повреждён, данные хранятся в ООП!! Примите меры.
     */
    public boolean isFileError();

    /**
     * Снять флаг ошибки файла. Вызывается после того, как администратор системы выполнил некоторые действия по устранению ошибки
     */
    public void uncheckFileError();
}

